<?php
/**
 * 扩展IValidator以适应Form校验
 *
 * @package if
 * @subpackage module.ui
 * @since 1.1.0
 * @see IValidator
 */
class IFormValidator extends IValidator {
	/**
	 * Enter description here...
	 *
	 * @var UIFormElement
	 */
	private $element;
	
	/**
	 * 设置当前校验器对应的表单元素
	 *
	 * @param UIFormElement $element 表单元素
	 * @since 1.1.0
	 */
	function setElement(UIFormElement $element) {
		$this->element = $element;
	}
	
	/**
	 * 校验一个通过IUpload上传的File信息
	 * 
	 * 使用此校验器前需要安装IUpload模块
	 * 
	 * 支持的参数有：
	 * - min <integer> 最小尺寸
	 * - max <integer> 最大尺寸
	 * - type <string|array> mime类型
	 * - ext <string|array> 扩展名，不含点
	 *
	 * @param array $info 文件信息
	 * @since 1.1.0
	 * @return boolean
	 */
	function file($params = null) {
		$upload = IUpload::instance();
		if (is_array($params)) {
			$upload->validator($this->element->indexedName(), $params);
		}
		$file = $upload->file($this->element->indexedName());
		return !$upload->validateFile($file);
	}
	
	/**
	 * 检查控件的值是否和当前控件的值一致
	 *
	 * @param string $controlId 控件值
	 * @since 1.1.0
	 * @return boolean
	 */
	function equalTo($controlId = null) {
		if ($controlId) {
			$control = UIContainer::instance()->get($controlId);
			if (if_is_instance_of($control, "UIFormElement")) {
				$value = $this->element->requestValue();
				$compareValue = $control->requestValue();
				return $value == $compareValue;
			}
		}
		return false;
	}
	
	/**
	 * 检查验证码是否正确
	 *
	 * @param array $params 包含选项的数组：nocase是否区分大小写，默认为true; for校验码控件的ID
	 * @return boolean
	 * @since 1.1.2
	 */
	function captcha($params = null) {
		if (is_array($params)) {
			$id = isset($params["for"]) ? $params["for"] : null;
			if (!isset($params["nocase"]) || $params["nocase"]) {
				return strcasecmp($this->value, ICaptcha::text($id)) == 0;
			}
			return strcmp($this->value, ICaptcha::text($id)) == 0;
		}
		return false;
	}
}

?>